/* 结构体tm注释
struct tm {
int tm_sec; // 秒，取值0~59；
int tm_min; // 分，取值0~59；
int tm_hour; // 时，取值0~23；
int tm_mday; // 月中的日期，取值1~31；
int tm_mon; // 月，取值0~11；
int tm_year; // 年，其值等于实际年份减去1900；
int tm_wday; // 星期，取值0~6，0为周日，1为周一，依此类推；
int tm_yday; // 年中的日期，取值0~365，0代表1月1日，1代表1月2日，依此类推；
int tm_isdst; // 夏令时标识符，实行夏令时的时候，tm_isdst为正；不实行夏令时的进候，tm_isdst为0；不了解情况时，tm_isdst()为负
};
*/

//从网络更新时间
void sync_time_from_NTP(){
  if(system_internet_mode!=0 && WiFi.status() == WL_CONNECTED){
    configTime(8 * 3600, 0, NTP1, NTP2, NTP3);
    if(getLocalTime(&local_time)){
      Serial.print(F("已同步网络时间: "));
      Serial.println(&local_time, "%F %T %A");
      MQTT_send_log(F("同步时间"));
    }
  }
}
//每日执行任务
void daily_work_controller(){
    if(getLocalTime(&local_time)){
      if(local_time.tm_mday!=system_daily_work_over_date){
        if(system_daily_work_over_date==0){     //防止正常重启重复执行每日任务
          system_daily_work_over_date  = local_time.tm_mday; 
          return;
        }
        //1、每日电量清零
        system_power_meter_in      = 0.0;
        system_power_meter_bat     = 0.0;
        system_power_meter_out     = 0.0;
        //2、校准同步网络时间
        sync_time_from_NTP();
        //每日任务完成标记
        system_daily_work_over_date  = local_time.tm_mday;    //日期改为今天，以备明天使用
        MQTT_send_log(F("每日任务完成"));
      }
    }else{ 
      sync_time_from_NTP();     
    }
}

//计时类
class STime{
  private:
    long ss;
    long mm;
    long hh;
    long day;
  public:
    STime(long start_millis, long now_millis){
      
    }
    STime(){
      ss  = ((millis()%3600000)%60000)/1000;
      mm  = (millis()%3600000)/60000;
      hh  = (millis()%86400000)/3600000;
      day =  millis()/86400000;
    }
    long getS(){
      return ss;
    }
    long getM(){
      return mm;
    }
    long getH(){
      return hh;
    }
    long getD(){
      return day;
    }
    String getS_str(){
      return (String)ss;
    }
    String getM_str(){
      return (String)mm;
    }
    String getH_str(){
      return (String)hh;
    }
    String getD_str(){
      return (String)day;
    }
};
